package com.xunsiya.module.device.dao;

import com.xunsiya.module.device.vo.Device;
import com.xunsiya.system.vo.Company;
import com.xunsiya.system.vo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 设备接口
 *
 * @author jiax
 * @version 1.0
 */
public interface DeviceMapper {

    /**
     * 根据id删除设备信息
     *
     * @param id 设备id
     * @return
     */
    public boolean deleteDevice(Integer id);

    /**
     * 更新设备信息
     *
     * @param device 设备信息
     * @return
     */
    public boolean updateDevice(Device device);

    /**
     * 保存设备信息
     *
     * @param device 设备信息
     * @return
     */
    public boolean saveDevice(Device device);

    /**
     * 分页查询数量
     *
     * @param device 设备信息
     * @return
     */
    public int queryCount(Device device);

    /**
     * 分页查询
     *
     * @param device    设备信息
     * @param pageStart 起始页
     * @param pageSize  每页查询数量
     * @return
     */
    public List<Device> queryForPage(@Param("device") Device device, @Param("pageStart") int pageStart,
                                     @Param("pageSize") int pageSize);

    /**
     * 查询是否存在该蓝牙地址
     *
     * @param guid 设备蓝牙地址
     * @return
     */
    public Device queryByGuid(String guid);

    /**
     * 根据紫万账号查询设备使用时间
     *
     * @param zwanNumber 紫万账号
     * @return
     */
    public Integer querySpendTime(String zwanNumber);

    /**
     * 根据紫万账号查询设备
     *
     * @param zwanNumber 紫万账号
     * @return
     */
    public Device findByZwan(String zwanNumber);

    /**
     * 删除设备的同时根据紫万账号删除对应的设备时长使用记录
     *
     * @param zwNumber 紫万账号
     * @return
     */
    public boolean deleteSpendTime(String zwNumber);

    /**
     * 根据id查询记录
     *
     * @param id 设备id
     * @return
     */
    public List<Device> queryDeviceById(Integer id);

    /**
     * 根据蓝牙地址查询设备
     *
     * @param guid 蓝牙地址
     * @return
     */
    public Device findByGuid(String guid);

    /**
     * 根据companyID获取公司信息
     * @param companyId 单位id
     * @return
     */
    public Company queryCompanyInfoById(Integer companyId);

    /**
     * 查询设备数量
     *
     * @param device 设备
     * @return
     */
    public Integer queryDeviceCount(Device device);

    /**
     * 查找绑定用户
     *
     * @param companyId 公司编号
     * @return
     */
    public List<User> findBindUsers(Integer companyId);

    /**
     * 修改公司信息
     *
     * @param company 公司
     */
    public void updateCompanyInfo(Company company);

    /**
     * 查询设备
     *
     * @param device 设备
     * @return
     */
    public List<Device> queryAllTypesDevice(Device device);

    /**
     * 查询用户名
     *
     * @param userId 用户编号
     * @return
     */
    public String queryUserName(Integer userId);

    /**
     * 根据公司编号查询子公司
     *
     * @param companyId 公司编号
     * @return
     */
    public List<Company> findSubCompany(Integer companyId);

    /**
     * 查询所有公司
     *
     * @return
     */
    public List<Company> findAllSubCompany();

    /**
     * 查询所有用户
     *
     * @param companyId 公司编号
     * @return
     */
    public List<User> findAllUsers(Integer companyId);

    public List<Device> findOtherDevice(Integer parentId);
}
